package com.example.gulimall.ware.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.example.common.entity.order.OrderEntity;
import com.example.common.to.ware.SkuHasStockTo;
import com.example.common.to.ware.LockStockResultTo;
import com.example.common.to.ware.WareSkuLockTo;
import com.example.common.utils.PageUtils;
import com.example.gulimall.ware.entity.WareSkuEntity;
import com.rabbitmq.client.Channel;
import org.springframework.amqp.core.Message;

import java.io.IOException;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;

/**
 * 商品库存
 *
 * @author zyred
 * @email zyred@163.com
 * @date 2021-08-23 11:58:31
 */
public interface WareSkuService extends IService<WareSkuEntity> {

    PageUtils queryPage(Map<String, Object> params);

    void updateBatchByCondition(List<WareSkuEntity> success);

    List<SkuHasStockTo> hasStock(List<Long> skuIds);

    /**
     * 锁定库存，这里老师返回的是 boolean ，但是我已经写好了，不想改了 ！！！！！！！！！！！
     * @param to        提交库存锁定参数
     * @return          返回结果集，详情见类内注释
     */
    void lockWare(WareSkuLockTo to) throws Exception;

    /**
     * 此方法由库存服务主动监听库存队列
     *
     * @param container     库存服务发送的消息
     * @throws IOException  异常
     */
    void unlockStock(List<LinkedHashMap<String, Object>> container) throws IOException;

    /**
     * 此方法是由订单服务释放了订单后推送的消息处理
     *
     * @param order         订单信息
     * @throws IOException  异常
     */
    void unlockStock(OrderEntity order) throws IOException;
}

